Dynamic systems development method

Dynamic systems development method (DSDM) is an agile project delivery framework, primarily used as a software development method. DSDM was originally based upon the rapid application development method. In 2007 DSDM became a generic approach to project management and solution delivery. DSDM is an iterative and incremental approach that embraces principles of Agile development, including continuous user/customer involvement.

DSDM fixes cost, quality and time at the outset and uses the MoSCoW prioritisation of scope into musts, shoulds, coulds and won't haves to adjust the project deliverable to meet the stated time constraint. DSDM is one of a number of Agile methods for developing software and non-IT solutions, and it forms a part of the Agile Alliance.

The most recent version of DSDM, launched in 2007, is called DSDM Atern. The name Atern is a shortening of Arctic Tern - a collaborative bird that can travel vast distances and epitomises many facets of the method which are natural ways of working e.g. prioritisation and collaboration.

The previous version of DSDM (released in May 2003) which is still widely used and is still valid is DSDM 4.2 which is a slightly extended version of DSDM version 4. The extended version contains guidance on how to use DSDM with Extreme Programming.

Contents

DSDM and the DSDM Consortium: origins

In the early 1990s, a new term (RAD) was spreading across the IT industry. The user interfaces for software applications were moving from the old green screens to the graphical user interfaces that are used today. New application development tools were coming on the market, such as PowerBuilder. These enabled developers to share their proposed solutions much more easily with their customers – prototyping became a reality and the frustrations of the classical, sequential (waterfall) development methods could be put to one side.

However, the RAD movement was very unstructured: there was no commonly agreed definition of a suitable process and many organisations came up with their own definition and approach. Many major corporations were very interested in the possibilities but they were also concerned that they did not lose the level of quality in the end deliverables that free-flow development could give rise to.

The DSDM Consortium was founded in 1994 by an association of vendors and experts in the field of software engineering and was created with the objective of "jointly developing and promoting an independent RAD framework" by combining their best practice experiences. The origins were an event organised by the Butler Group in London. People at that meeting all worked for blue-chip organisations such as British Airways, American Express, Oracle and Logica (other companies such as Data Sciences and Allied Domecq have since been absorbed by other organisations).

At the initial meeting it was decided that Jennifer Stapleton, then of Logica, would put together an architecture for an end-to-end, user-centric but quality-controlled method for iterative and incremental development. The resulting architecture was designed to be fully compatible with ISO 9000 and PRINCE2, which were two major concerns for the group. Once the architecture was in place (a month after the initial meeting), the Consortium formed various task groups to populate it with all aspects of software development, including project management tools and techniques, quality and testing, development tools and techniques, personnel and software procurement. An oversight group led by the architect and consisting of the chairs of the task groups ensured consistency of the approach as it was developed.

Although many of the Consortium members were direct business competitors, they shared freely how they had addressed the various aspects. Best practice was extracted and formed into a cohesive whole. As the Consortium grew in its first year from a handful of organisations to sixty, the content of the method became increasingly robust. Version 1 was baselined in December 1994 and published in February 1995. The result was a generic method covering people, process and tools that was formed from the experiences of organisations of all sectors and sizes.

The DSDM Consortium is a not-for-profit, vendor-independent organisation which owns and administers the DSDM framework.

DSDM Atern

Atern is a vendor-independent approach that recognises that more projects fail because of people issues than technology. Atern’s focus is on helping people to work effectively together to achieve the business goals. Atern is also independent of tools and techniques enabling it to be used in any business and technical environment without tying the business to a particular vendor.

Overview of DSDM Atern

As an extension of rapid application development, DSDM focuses on information systems projects that are characterised by tight schedules and budgets. DSDM addresses the most common failures of information systems projects, including exceeding budgets, missing deadlines, and lack of user involvement and top-management commitment

In 2007 a team set up by the DSDM Consortium looked into the content of DSDM V4.2 and decided that the underlying mechanics and structure were completely sound but that the terminology and the focus purely on I.T. applications should be updated to meet the needs of projects in the new millennium. Some of the content of the method had been there since 1995. The new version was launched at the Cafe Royale in London on 24 April 2007. Some amendments were made in April 2008 (Atern V2) and incorporated in the latest version of the Atern Handbook.

The DSDM Atern approach

Principles

There are eight principles underpinning DSDM Atern. These principles direct the team in the attitude they must take and the mindset they must adopt in order to deliver consistently.

1. Focus on the business need

The main criteria for acceptance of a "deliverable" is delivering a system that addresses the current business needs. Delivering a perfect system which addresses all possible business needs is less important than focusing on critical functionalities.

  • Understand the true business priorities
  • Establish a sound Business Case
  • Seek continuous business sponsorship and commitment
  • Guarantee the Minimum Usable Subset of features.

2. Deliver on time

  • Timebox the work
  • Focus on business priorities
  • Always hit deadlines

3. Collaborate

User involvement is the main key in running an efficient and effective project, where both users and developers share a workplace (either physical or via tools), so that the decisions can be made collaboratively and quickly.

  • Involve the right stakeholders, at the right time, throughout the project
  • Ensure that the members of the team are empowered to take decisions on behalf of those they represent without waiting for higher-level approval.
  • Actively involve the business representatives
  • Build a one-team culture

4.Never compromise quality

  • Set the level of quality at the outset
  • Ensure that quality does not become a variable
  • Design, document and test appropriately
  • Build in quality by constant review
  • Test early and continuously. See test-driven development for comparison.

5. Build incrementally from firm foundations

  • Strive for early delivery of business benefit where possible
  • Continually confirm the correct solution is being built
  • Formally re-assess priorities and ongoing project viability with each delivered increment

6. Develop iteratively

A focus on frequent delivery of products, with assumption that to deliver something "good enough" earlier is always better than to deliver everything "perfectly" in the end. By delivering product frequently from an early stage of the project, the product can be tested and reviewed where the test record and review document can be taken into account at the next iteration or phase.

  • Do enough design up front to create strong foundations
  • Take an iterative approach to building all products
  • Build customer feedback into each iteration to converge on an effective business solution
  • Accept that most detail emerges later rather than sooner
  • Embrace change – the right solution will not evolve without it
  • Be creative, experiment, learn, evolve

7. Communicate continuously and clearly

Communication and cooperation among all project stakeholders is required to be efficient and effective.

  • Run daily team stand-up sessions
  • Use facilitated workshops
  • Use rich communication techniques such as modelling and prototyping
  • Present iterations of the evolving solution early and often
  • Keep documentation lean and timely
  • Manage stakeholder expectations throughout the project
  • Encourage informal, face to face communication at all levels

8. Demonstrate control

  • Use an appropriate level of formality for tracking and reporting
  • Make plans and progress visible to all
  • Measure progress through focus on delivery of products rather than completed activities
  • Manage proactively
  • Evaluate continuing project viability based on the business objectives

Prerequisites for using DSDM

In order for DSDM to be a success, there are 9 instrumental factors which need to be met. If these cannot be met, it presents a risk to the Atern approach which is not necessarily a show stopper but which does need to be managed. These risks are also highlighted by the Project Approach Questionnaire.

  1. Acceptance of the Atern philosophy before starting work.
  2. Appropriate empowerment of the Solution Development Team.
  3. Commitment of senior business management to provide the necessary Business Ambassador (and Business Advisor) involvement.
  4. Incremental delivery
  5. Access by the Solution Development Team to business roles
  6. Solution Development Team stability.
  7. Solution Development Team skills.
  8. Solution Development Team size.
  9. A supportive commercial relationship.

DSDM 4.2

Overview of DSDM version 4.2

As an extension of rapid application development, DSDM focuses on information systems projects that are characterised by tight schedules and budgets. DSDM addresses the most common failures of information systems projects, including exceeding budgets, missing deadlines, and lack of user involvement and top-management commitment. By encouraging the use of RAD, however, careless adoption of DSDM may increase the risk of cutting too many corners. DSDM consists of

In some circumstances, there are possibilities to integrate practices from other methodologies, such as Rational Unified Process (RUP), Extreme Programming (XP), and PRINCE2, as complements to DSDM. Another agile method that has some similarity in process and concept to DSDM is Scrum.

In July 2006, DSDM Public Version 4.2[1] was made available for individuals to view and use; however, anyone reselling DSDM must still be a member of the not-for-profit consortium.

DSDM V4.2 Project Life-cycle

Overview : three phases of DSDM V4.2

The DSDM framework consists of three sequential phases, namely the pre-project, project life-cycle and post-project phases. The project phase of DSDM is the most elaborate of the three phases. The project life-cycle phase consists of 5 stages that form an iterative step-by-step approach in developing an IS. The three phases and corresponding stages are explained extensively in the subsequent sections. For each stage/phase, the most important activities are addressed and the deliverables are mentioned.

Phase 1 - The Pre-project 
In the pre-project phase candidate projects are identified, project funding is realised and project commitment is ensured. Handling these issues at an early stage avoids problems at later stages of the project like cows.
Phase 2 - The Project life-cycle 
The process overview in the figure below shows the project life-cycle of this phase of DSDM. It depicts the 5 stages a project will have to go through to create an implemented system. The first two stages, the Feasibility Study and Business Study are sequential phases that complement to each other. After these phases have been concluded, the system is developed iteratively and incrementally in the Functional Model Iteration, Design & Build Iteration and Implementation stages. The iterative and incremental nature of DSDM will be addressed further in a later section.
Phase 3 - Post-project 
The post-project phase ensures the system operates effectively and efficiently. This is realised by maintenance, enhancements and fixes according to DSDM principles. The maintenance can be viewed as continuing development based on the iterative and incremental nature of DSDM. Instead of finishing the project in one cycle usually the project can return to the previous phases or stages so that the previous step and the deliverable products can be refined.

Below is the process-data diagram of DSDM as a whole Project life-cycle with all of its four steps. This diagram depicts the DSDM iterative development, started on functional model iteration, design and build iteration, and implementation phase. The description of each stage will be explained later in this entry.

The four steps of the DSDM V4.2 Project Life-cycle

Activity Sub activity Description
Study Feasibility Study Stage where the suitability of DSDM is assessed. Judging by the type of project, organisational and people issues, the decision is made, whether to use DSDM or not. Therefore it will generate a FEASIBILITY REPORT, a FEASIBILITY PROTOTYPE, and a GLOBAL OUTLINE PLAN which includes a DEVELOPMENT PLAN and a RISK LOG.
Business Study Stage where the essential characteristics of business and technology are analysed. Approach to organise workshops, where a sufficient number of the customer’s experts are gathered to be able to consider all relevant facets of the system, and to be able to agree on development priorities. In this stage, a PRIORITISED REQUIREMENTS LIST, a BUSINESS AREA DEFINITION, a SYSTEM ARCHITECTURE DEFINITION, and an OUTLINE PROTOTYPING PLAN are developed.
Functional Model Iteration Identify functional prototype Determine the functionalities to be implemented in the prototype that results from this iteration. In this sub-stage, a FUNCTIONAL MODEL is developed according to the deliverables result of business study stage.
Agree schedule Agree on how and when to develop these functionalities.
Create functional prototype Develop the FUNCTIONAL PROTOTYPE, according to the agreed schedule and FUNCTIONAL MODEL.
Review functional prototype Check correctness of the developed prototype. This can be done via testing by end-user and/or reviewing documentation. The deliverable is a FUNCTIONAL PROTOTYPING REVIEW DOCUMENT.
Design and Build Iteration Identify design prototype Identify functional and non-functional requirements that need to be in the tested system. And based on these identifications, an IMPLEMENTATION STRATEGY is involved. If there is a TEST RECORD from the previous iteration, then it will be also used to determine the IMPLEMENTATION STRATEGY.
Agree schedule Agree on how and when to realise these requirements.
Create design prototype Create a system (DESIGN PROTOTYPE) that can safely be handed to end-users for daily use, also for testing purposes.
Review design prototype Check the correctness of the designed system. Again testing and reviewing are the main techniques used. An USER DOCUMENTATION and a TEST RECORD will be developed.
Implementation User approval and guidelines End users approve the tested system (APPROVAL) for implementation and guidelines with respect to the implementation and use of the system are created.
Train users Train future end user in the use of the system. TRAINED USER POPULATION is the deliverable of this sub-stage.
Implement Implement the tested system at the location of the end users, called as DELIVERED SYSTEM.
Review business Review the impact of the implemented system on the business, a central issue will be whether the system meets the goals set at the beginning of the project. Depending on this the project goes to the next stage, the post-project or loops back to one of the preceding stages for further development. This review is will be documented in a PROJECT REVIEW DOCUMENT.

Four stages of the DSDM V4.2 Project life-cycle

Stage 1A: The Feasibility Study

During this stage of the project, the feasibility of the project for the use of DSDM is examined. Prerequisites for the use of DSDM are addressed by answering questions like: ‘Can this project meet the required business needs?’, ‘Is this project suited for the use of DSDM?’ and ‘What are the most important risks involved?’. The most important techniques used in this phase are the Workshops.

The deliverables for this stage are the Feasibility Report and the Feasibility Prototype that address the feasibility of the project at hand. It is extended with a Global Outline Plan for the rest of the project and a Risk Log that identifies the most important risks for the project.

Stage 1B: The Business Study

The business study extends the feasibility study. After the project has been deemed feasible for the use of DSDM, this stage examines the influenced business processes, user groups involved and their respective needs and wishes. Again the workshops are one of the most valuable techniques, workshops in which the different stakeholders come together to discuss the proposed system. The information from these sessions is combined into a requirements list. An important property of the requirements list is the fact that the requirements are (can be) prioritised. These requirements are prioritised using the MoSCoW approach. Based on this prioritisation, a development plan is constructed as a guideline for the rest of the project.

An important project technique used in the development of this plan is timeboxing. This technique is essential in realising the goals of DSDM, namely being on time and on budget, guaranteeing the desired quality. A system architecture is another aid to guide the development of the IS.The deliverables for this stage are a business area definition that describes the context of the project within the company, a system architecture definition that provides an initial global architecture of the IS under development together with a development plan that outlines the most important steps in the development process. At the base of these last two documents there is the prioritised requirements list. This list states all the requirements for the system, organised according to the MoSCoW principle. And last the Risk Log is updated with the facts that have been identified during this phase of DSDM.

Stage 2: Functional Model Iteration

The requirements that have been identified in the previous stages are converted to a functional model. This model consists of both a functioning prototype and models. Prototyping is one of the key project techniques within this stage that helps to realise good user involvement throughout the project. The developed prototype is reviewed by different user groups. In order to assure quality, testing is implemented throughout every iteration of DSDM. An important part of testing is realised in the Functional Model Iteration. The Functional Model can be subdivided into four sub-stages:

The deliverables for this stage are a Functional Model and a Functional Prototype that together represent the functionalities that could be realised in this iteration, ready for testing by users. Next to this, the Requirements List is updated, deleting the items that have been realised and rethinking the prioritisation of the remaining requirements. The Risk Log is also updated by having risk analysis of further development after reviewing the prototyping document.

Stage 3: Design and Build Iteration

The main focus of this DSDM iteration is to integrate the functional components from the previous phase into one system that satisfies user needs. It also addresses the non-functional requirements that have been set for the IS. Again testing is an important ongoing activity in this stage. The Design and Build Iteration can be subdivided into four sub-stages:

The deliverables for this stage are a Design Prototype during the phase that end users get to test and at the end of the Design and Build Iteration the Tested System is handed over to the next phase. In this stage, the system is mainly built where the design and functions are consolidated and integrated in a prototype. Another deliverable for this stage is a User Documentation.

Stage 4: Implementation

In the Implementation stage, the tested system including user documentation is delivered to the users and training of future users is realised. The system to be delivered has been reviewed to include the requirements that have been set in the beginning stages of the project. The Implementation stage can be subdivided into four sub-stages:

DSDM V4.2 Functional Model Iteration

Meta-data model

The associations between concepts of deliverables in Functional Model Iteration stage are depicted in the meta-data model below. This meta-data model will be combined with the meta-process diagram of Functional Model Iteration phase in the next part.

Concept Definition
RISK LOG Log of identified risk. Important since the next stage onward, encountered problem will be more difficult to address. This risk log will need to be updated continuously. (VTT Publication 478)
PRIORITISED REQUIREMENTS LIST List of requirements based on its prioritisation. The prioritisation process is based on MoSCoW technique, to determine which requirements must be implemented first into the system (the ones that meet the business needs), and so on.
NON-FUNCTIONAL REQUIREMENTS LIST List of non-functional requirements is mainly to be dealt in the next stage. (VTT Publication 478)
FUNCTIONAL REQUIREMENT Function that is used to build the model and prototyping according to its priority.
FUNCTIONAL MODEL Model that is built according to the functional requirements. It will be used in order to develop the functional prototype in the next sub-stage. This concept will be used to develop a PROTOTYPING PLAN.
PROTOTYPING The process of quickly putting together a working model (a prototype) in order to test various aspects of the design, illustrate ideas or features and gather early user feedback.
TIME SLOT The list of available times to do certain activities in order to perform the plan according to the schedule.
PROTOTYPING PLAN Activities plan within prototyping process that will be performed in available time slots according to the schedule.
SCHEDULE A set of activities plan with the related time agreed by the developers. This concept will be used to support the implementation of FUNCTIONAL PROTOTYPE.
FUNCTIONAL PROTOTYPE A prototype of the functions the system should perform and how it should perform them.
IMPLEMENTATION PLAN A preparation of activities to implement the functional prototyping according to the schedule and the prioritised requirements list.
REFINED FUNCTION Function of prototype that is being refined within current iteration before it is combined to the others and tested.
COMBINED FUNCTION Function of prototyped that is combined with the other functional prototypes of previous iteration. The new combination functional prototype will be tested in the next stage.
TEST RECORD Record set of testing where the test script, test procedure, and test result are included. This test record is used to develop the FUNCTIONAL PROTOTYPING REVIEW DOCUMENT, and is also used indirectly to update the PRIORITISED REQUIREMENTS LIST.
FUNCTIONAL PROTOTYPING REVIEW DOCUMENT It collects the users’ comments about the current increment, working as input for subsequent iterations (VTT Publication 478). This review document will be used to update the RISK LOG and PRIORITISED REQUIREMENTS LIST.

Process-data model

Identify functional prototype activity is to identify the functionalities that would be in the prototype of current iteration. Recall that both, analysis and coding are done; prototypes are built, and the experiences gained from them are used in improving the analysis models (based also on updated prioritised requirements list and updated risk log). The built prototypes are not to be entirely discarded, but gradually steered towards such quality that they can be included in the final system. Agree schedule is to determine when and how the prototyping will be implemented; it extends the scope to the available timetable and prototyping plan. And since testing is implemented throughout the whole process, it’s also an essential part of this phase, and therefore it is included in the Review Prototype activity right after the functional prototype is built and the test record will eventually be used in the review prototype process and generates the review document. Below is the process-data diagram of Functional Model Iteration stage.

Activity Sub activity Description
Identify functional prototype Analyse the requirements The requirements of current prototype are analysed according to the prioritised requirements list that is previously developed (in previous iteration and/or in previous phase which is business study phase).
List requirements of current iteration Select the functional requirements that would be implemented in the current iteration’s prototype, and list them in the FUNCTIONAL REQUIREMENT.
List non-functional requirements List the non-functional requirements of the system that is being developed in NON-FUNCTIONAL REQUIREMENTS LIST.
Create functional model Analysis model and prototype codes are included in this sub-activity to develop the FUNCTIONAL MODEL.
Agree schedule Determine time Identify possible timetable (TIME SLOT) to perform the prototyping activities according to the prototyping plan and prototyping strategy.
Design development The PROTOTYPING PLAN, including all prototyping activities that will be performed on available TIME SLOT.
Agreement The agreement SCHEDULE of when and how the prototyping activities should be performed.
Create functional prototype Investigate Investigate the requirements; analyse the FUNCTIONAL MODEL that has been built in earlier activity, and set the IMPLEMENTATION PLAN according to the analysis model, and will be used to build the prototype in the next sub-activity.
Refine Implement the FUNCTIONAL MODEL and IMPLEMENTATION PLAN to build a FUNCTIONAL PROTOTYPE. This prototype will be then refined before it is combined to the other functions. This prototype will be gradually steered towards such quality that it can be included in the final system (through refining process).
Consolidate Consolidate the refined FUNCTIONAL PROTOTYPE with the other prototype of previous iteration. The new combination FUNCTIONAL PROTOTYPE will be tested in the next activity.
Review prototype Test prototype The essential part of DSDM that needs to be included throughout the whole process of DSDM. The TEST RECORD will be used together with users’ comments to develop the PROTOTYPING REVIEW DOCUMENT in the next activity of FMI phase.
Review prototype Collects the user comments and documentation. The test records will play an important role to develop this review report. Based on this FUNCTIONAL PROTOTYPING REVIEW DOCUMENT, the prioritised requirements list and risk log will be updated, and decide to set the next course whether or not to do another iteration of FMI phase.

Further DSDM V4.2 topics

Core Techniques of DSDM

MUST have this requirement to meet the business needs.
SHOULD have this requirement if at all possible, but the project success does not rely on this.
COULD have this requirement if it does not affect the fitness of business needs of the project.
WOULD have this requirement at later date if there is some time left (or in the future development of the system).

Roles in DSDM

There are some roles introduced within DSDM environment. It is important that the project members need to be appointed to different roles before they start to run the project. Each role has its own responsibility. The roles are:

Iterative and Incremental Nature

Next to timeboxing and prioritising of requirements, the DSDM also provides an iterative and incremental approach to IS development. This can be seen in the figure depicting the Process Overview above.

The Functional Model Iteration, Design & Build Iteration and Implementation stages can go over their sub stages several times before entering the next stage. Each iteration addresses a set of new functionalities, and every iteration builds on a working predecessor. Each iteration can be undone if needed.

The Process Overview figure also shows arrows going back to previous stages. For example, there is an arrow from Implementation to the Business Study. If a big functionality has been discovered during development that couldn’t be implemented, it might be possible to start all over by defining new requirements in a Business Study. Similarly, there is an arrow from Implementation to the Functional Model Iteration. Functionality might be omitted during a previous Functional Model Iteration because of time or budget constraints. The project should proceed into the post-project phase only when it meets all the requirements defined by the project and business goals.

Because of the iterative nature of DSDM, it is essential to maintain good requirements management and configuration management throughout the entire project. This ensures that the project does implement the requirements that were decided in the early phases of the project.

Meta-model (Meta-Modeling)

As explained in the Wikipedia item, Meta-Modeling takes a higher level look at methods and techniques. In doing so it offers possibilities for comparing similar methods and techniques and engineering new methods from existing ones.

The Meta data model, depicted above, identifies the concepts and associations between these concepts within DSDM. As can be seen from the figure, two main concepts can be identified, namely the Phase and the Flow concept. Each Flow originates from a Phase within DSDM. Flows can be divided up in the sub concepts Data and Product. This subdivision is denoted with a C, which means that the subdivision is disjoint and complete. In other words, a Flow is always either a Data Flow or a Product Flow, but never both. In the situation of DSDM a Data Flow can be an arc returning to one of the preceding phases. Product Flows are tangible goods that result from one of the Phases and are the input of the next Phase, for example reports and prototypes.

Then there is the second concept Phase that is also be divided two sub concepts with a complete and disjoint ordering. These sub concepts are the Sequential and the Iterative Phases. As was explained in an earlier section, DSDM starts with two sequential phases, The Feasibility and Business Study. Next a number of Iterative phases follow, i.e. Functional Model, Design & Build and Implementation phases. The picture also mentions a number of rules and issues that are not included in the model, but that are important for this meta-model. First there are the rules that concerns the behavior of the ‘’Flows’’. These rules restrict the freedom of the flows so that they correspond to the ‘’Phase’’ transitions within DSDM. Next to the rules a number of important issues are addressed that ensure that the DSDM project life-cycle is guaranteed.

Critical Success Factors of DSDM

Within DSDM a number of factors are identified as being of great importance to ensure successful projects.

Comparison to other IS Development Methods

Over the years a great number of Information System Development methods have been developed and applied, divided in Structured Methods, RAD methods and Object-Oriented Methods. Many of these methods show similarities to each other and also to DSDM. For example Extreme Programming(XP) also has an iterative approach to IS development with extensive user involvement.

The Rational Unified Process is a method that probably has the most in common with DSDM in that it is also a dynamic form of Information System Development. Again the iterative approach is used in this development method.

Like XP and RUP there are many other development methods that show similarities to DSDM, but DSDM does distinguish itself from these methods in a number of ways. First there is the fact that it provides a tool and technique independent framework. This allows users to fill in the specific steps of the process with their own techniques and software aids of choice. Another unique feature is the fact that the variables in the development are not time/resources, but the requirements. This approach ensures the main goals of DSDM, namely to stay within the deadline and the budget. And last there is the strong focus on communication between and the involvement of all the stakeholders in the system. Although this is addressed in other methods, DSDM strongly believes in commitment to the project to ensure a successful outcome.

See also

References

Further reading

External links